#include <stdio.h>
#include <stdbool.h>

struct date {
	int month;
	int day;
	int year;
};

bool isLeap(struct date d);
int numberOfDays(struct date d);
bool validateInput(struct date d);

int main(void)
{
	struct date today, tomorrow;

	printf("Enter today's date (mm dd yyyy): ");
	scanf("%i %i %i", &today.month, &today.day, &today.year);
	
	if(!validateInput(today)) {
		printf("Input is wrong!\n");
		return 1;
	}

	if(today.day != numberOfDays(today)) {
		tomorrow.day = today.day + 1;
		tomorrow.month = today.month;
		tomorrow.year = today.year;
	} else if(today.month == 12) {
		tomorrow.day = 1;
		tomorrow.month = 1;
		tomorrow.year = today.year + 1;
	} else {
		tomorrow.day = 1;
		tomorrow.month = today.month + 1;
		tomorrow.year = today.year;
	}

	printf("Tomorrow's date is %i-%i-%i.\n", tomorrow.year, tomorrow.month, tomorrow.day);

	return 0;
}

bool validateInput(struct date d) {
	bool ok = true;
	if(d.day < 1 || d.day > 31) {
		ok = false;
	}
	if(d.month < 1 || d.month > 12) {
		ok = false;
	}
	if(d.year < 1) {
		ok = false;
	}
	
	return ok;
}

int numberOfDays(struct date d)
{
	int days;
	const int daysPerMonth[12] = {
		31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
	};
	
	if(d.month == 2 && isLeap(d)) {
		days = 29;
	} else {
		days = daysPerMonth[d.month - 1];
	}

	return days;
}

bool isLeap(struct date d)
{
	bool leap = false;
	if((d.year % 4 == 0 && d.year % 100 == 0) || d.year % 400 == 0) {
		leap = true;
	}

	return leap;
}

